Здесь я познакомплю вас со скриптами (или скриптовыми командами?), которые сделают вашу жизнь значительно проще, надеюсь. Да на мейкере многое можно провернуть через ивенты и стандартные команды, но порой они бывают невероятно мудреными и громозскими. А бывает что некоторые, казалось бы, простые фичи вообще нельзя реализовать используя стандартные функции.
Предисловие: сначала я хотел выбрать самые полезные скрипты, но потом подумал "если у меня не хватило воображения чтобы применить их, это не значит что у других его не хватит!" Так что отчасти это будет копипаст с этого топика с русскими комментариями.
Сообщения:
СпойлерТекст:
$game_message.face_name = 'fName' - название файла изображения актера
$game_message.face_index = fIndex - индекс изображения актера 0-7
$game_message.background = fBG - фон обычный(0), темный(1), прозрачный(2)
$game_message.position = fPos - позиция верх(0), середина(1), низ(2)
$game_message.add("Текст")
СпойлерВвод цифр:
$game_message.num_input_variable_id = x - ID переменной в которую запишется ввод
$game_message.num_input_digits_max = y - количество символов для ввода
СпойлерКлючевой предмет:
$game_message.item_choice_variable_id = x - ID переменной для записи
СпойлерПрокрутка текста:
$game_message.scroll_mode = true - стиль сообщения (true - прокрутка текста, false - обычное сообщение)
$game_message.scroll_speed = x - скорость
$game_message.scroll_no_fast = false - можно пропустить (true - нельзя, false - можно)
$game_message.add("Текст") - строка текста
Герои:
СпойлерИзменить ХП/МП:
Вот тут на забугорском сайте приводится довольно сложный пример, который я упростил.
Меняем ХП $game_actors[n].hp += x и меняем МП $game_actors[n].mp += x, где n - ID героя, x - значение на
которое сменить. В данном случае x прибавляется к текущему ХП/МП, но += можно заменить на -=, /=
, *= и даже на =. Однако выше максимального значения вам их не поднять!
Для всей партии используется
$game_party.members.each { |actor| actor.hp += x } и $game_party.members.each { |actor| actor.hp += x }
СпойлерСостояния:
Добавить
$game_actors[id].add_state(state_id), где state_id - ID состояния
Убрать
$game_actors[id].remove_state(state_id), где state_id - ID состояния
Для группы соответственно
$game_party.members.each { |actor| actor.add_state(state_id) }
$game_party.members.each { |actor| actor.remove_state(state_id) }
СпойлерПолное восстановление:
$game_actors[n].recover_all, где n - ID героя
Для группы
$game_party.members.each { |actor| actor.recover_all }
СпойлерОпыт:
$game_actors[n].change_exp(x, show), где n - ID героя, x - значение опыта, show - true/false показывает или не показывает сообщение о повышении уровня. Здесь значение только присваивается, а не прибавляется к текущему опыту героя.
Для группы
$game_party.members.each { |actor| actor.change_exp(x, show) }, тоже самое, но можно заменить x на
actor.exp + x, тогда опыт будет прибавляться к текущему значению.
СпойлерПараметры:
$game_actors[n].add_param(p, +/-x), где n - ID героя, x - значение параметра, p - ID параметра (0=MHP,
1=MMP, 2=ATK, 3=DEF, 4=MAT, 5=MDF, 6=AGI, 7=LUK)
Для группы
$game_party.members.each { |actor| actor.add_param(p, +/-x) }
СпойлерНавыки:
$game_actors[n].learn_skill(s) - узнать навык
$game_actors[n].forget_skill(s) - забыть навык
где n - ID героя, s - ID навыка
Для группы
$game_party.members.each { |actor| actor.learn_skill(s) }
$game_party.members.each { |actor| actor.forget_skill(s) }
СпойлерЭкипировка:
$game_actors[n].change_equip_by_id(v, e), где n - ID героя, v - слот (0=weapon, 1=shield, 2=head, 3=body,
4=accessory), e - ID предмета Предмет должен быть в инвентаре!
СпойлерИмя:
$game_actors[n].name = "текст", где n - ID героя
СпойлерКласс:
$game_actors[n].change_class(c), где n - ID героя, c - ID класса
СпойлерПрозвище:
$game_actors[n].nickname = "Текст", где n - ID героя
СпойлерЗолото:
$game_party.gain_gold(x) - дать x золота (если значение отрицательно, то работает как lose)
$game_party.lose_gold(x) - забрать х золота (если значение отрицательно, то работает как gain)
СпойлерПредметы:
n - ID предмета, х - количество (работает так же как и золото)
$game_party.gain_item($data_items[n], x) - дать
$game_party.lose_item($data_items[n], x) забрать
Для оружия и брони заменить items на weapons и armors соответственно
СпойлерПартия:
n - ID героя, p - позиция (0 - лидер)
$game_party.add_actor(n) - добавить
$game_party.remove_actor(n) - убрать
$game_party.remove_actor($game_party.members[p].id) - убрать героя с определенной позиции
Игровой процесс:
СпойлерПеременные:
Переменные легко задавать через стандартные методы, но как записать в переменную слово? А вот как.
$game_variables[n] = 'text', где n-номер переменной, а text-собственно текст. Можно использовать для паролей, храня их в переменных, а не в именах героев или записать в переменные, например, окончания слов. Тогда можно будет сделать различное обращение к персонажам мужского и женского пола.
СпойлерПереключатели:
Свитчи, точнее селф (локальные) свитчи. Стандартными методами вы можете включать и выключать селф свитчи только в самом событии, но не из других событий менять их невозможно и приходиться использовать кучу общих переключателей, захламляя базу. Но вот так можно обойтись и без них.
$game_self_switches[[map, event, 'N']] = value, где map-ID карты, event-ID эвента, N- A-D
При этом вы можете использовать @map_id-получает ID карты на которой вы находитесь и @event.id-получает ID эвента который использует скрипт.
Обычный свитч $game_switches[n] = true/false, где n его номер
СпойлерТаймер:
$game_timer.start(sec * Graphics.frame_rate) - запуск, где sec время действия в секундах
$game_timer.stop - остановка
СпойлерУсловие:
# Стандартное условие
if что-то происходит
# делай дело
else
# делай дело
end
# Ветвление условий, если у вас много вариантов
if что-то происходит
# делай это
elsif что-то еще происходит
# делай дело
elsif снова что-то происходит
# делай дело
elsif и опять
# делай дело
end
СпойлерОбщее событие:
$game_temp.reserve_common_event(x) - x-ID события
Движение:
СпойлерПеремещение игрока:
$game_temp.fade_type = fade
$game_player.reserve_transfer(map_id, x, y, direction)
Где fade изменение экрана = 0 черный, 1 белый, 2 без изменения
map_id, x, y - ID карты и координаты куда переместить
direction - направление [0] запомнить, [2] вниз, [4] влево, [6] вправо, [8] вверх
СпойлерТранспорт:
Преместить
$game_map.vehicles[n].set_location(map_id, x, y)
n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль
map_id, x, y - ID карты и координаты куда переместить
Получить данные о транспорте
$game_map.vehicles[n].x
$game_map.vehicles[n].y
n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль
СпойлерПеремещение события/игрока:
$game_map.events[n].moveto(x, y) - для ивента
$game_player.moveto(x, y) - для игрока (работает как $game_player.reserve_transfer(@map_id, x, y, 0))
n - ID события
x, y - новые координаты
СпойлерДвижение камеры:
$game_map.start_scroll(direction, distance, speed)
direction - направление [2] вниз, [4] влево, [6] вправо, [8] вверх
distance - дистанция в квадратах мейкера
speed - скорость [1] 1/8, [2] 1/4, [3] 1/2, [4] 1, [5] х2, [6] х4
СпойлерЗайти/Выйти из транспорта:
$game_player.get_on_off_vehicle = true/false
СпойлерОжидание:
Ожидание для перемещения
SceneManager.scene.wait(x), x - сколько кадров ждать
Ожидания для остального
x.times { Fiber.yield }, x - сколько кадров ждать
Картинки и погода:
СпойлерПоказать картинку:
screen.pictures[index].show(name, position, x, y, x zoom, y zoom, opacity, blend type)
index - индекс картинки
name - имя файла
позиция - position = [0] по краю, [1] по центру
x, y - координаты
x zoom, y zoom - увеличение по x, y = масштаб
opacity - прозрачность, для непрозрачности ставится 255
смешивание - blend type = [0] обычное, [1] добавление, [2] замещение
СпойлерДвигать картинку:
screen.pictures[index].move(position, x, y, x zoom, y zoom, opacity, blend type, wait)
index - индекс картинки
position(позиция) = [0] по краю, [1] по центру
x, y - координаты
x zoom, y zoom - увеличение по x, y = масштаб
opacity - прозрачность, для непрозрачности ставится 255
blend type(смешивание) = [0] обычное, [1] добавление, [2] замещение
wait - продолжительность движения, в кадрах
СпойлерВращать картинку:
screen.pictures[index].rotate(s)
index - индекс картинки
s - скорость вращения
СпойлерОттенок картинки:
screen.pictures[index].start_tone_change(Tone.new(0, 0, 0, 0), wait)
index - индекс картинки
Тон задается так же как и в окне, задаем вместо нулей
wait - время ожидания в кадрах
СпойлерУдалить картинку:
Для событий на карте
screen.pictures[index].erase
index - индекс картинки
СпойлерПогодные эффекты:
$game_map.screen.change_weather(type, power, time)
type(тип) = :none, :rain, :storm, :snow
power(сила) - сила с которой будет идти погода
time(время) - как быстро сменится погода, в кадрах
По умолчанию сила не модет быть больше 10, но чем больше число, тем темнее экран, а больше 30 экран уже
$game_player.followers.gather - все сопартийцы переходят в позицию игрока
СпойлерПоказать анимацию:
Для персонажа
$game_player.animation_id = n
Для события
$game_map.events[event_id].animation_id = n
event_id - ID события
n - ID анимации
СпойлерПоказать эмоцию:
Для персонажа
$game_player.balloon_id = n
Для события
$game_map.events[event_id].balloon_id = n
event_id - ID события
n - номер анимации от 1 до 10
СпойлерУдалить событие:
$game_map.events[event_id].erase
event_id - ID события
Экран:
СпойлерСкрыть/Показать экран:
Скрыть: screen.start_fadeout(n)
Показать: screen.start_fadein(n)
n - длительность, в кадрах
СпойлерЦвет экрана:
$game_map.screen.start_tone_change(Tone.new(255, 0, 0, 0), wait)
Тон задается так же как и в окне, задаем вместо нулей
wait - время ожидания в кадрах
СпойлерВспышка:
screen.start_flash(Color.new(0,0,0,power), wait)
Цвет задается так же как и в окне, задаем вместо нулей
power - сила вспышки (прозрачность)
wait - время ожидания в кадрах
СпойлерТряска:
$game_map.screen.start_shake(power, speed, duration)
power - сила тряски
speed - скорость
duration - время действия
По умолчанию сила и скорость в мейкере выше 9.
Музыка:
СпойлерПроиграть BGM/ME/BGS/SE:
RPG::BGM.new("BGM Name", volume, pitch).play
RPG::ME.new("ME Name", volume, pitch).play
RPG::BGS.new("BGS Name", volume, pitch).play
RPG::SE.new("SE Name", volume, pitch).play
Name - имя файла
volume - громкость
pitch - темп
Проиграть BGM карты
$game_map.autoplay
Проиграть BGM битвы
BattleManager.play_battle_bgm
Проиграть ME победы
BattleManager.play_battle_end_me
СпойлерСохранить/Вернуть/Остановить:
Сохранить BGM
$game_system.save_bgm
Сохранить BGM и BGS
BattleManager.save_bgm_and_bgs
Возобновить BGM
$game_system.replay_bgm
Возобновить BGM и BGS
BattleManager.replay_bgm_and_bgs
Заглушить BGM/BGS/ME
RPG::BGM.fade(time)
RPG::BGS.fade(time)
RPG::ME.fade(time)
где time - время в кадрах
Остановить BGM/BGS/ME/SE
RPG::BGM.stop
RPG::BGS.stop
RPG::ME.stop
RPG::SE.stop
troop_id - ID группы врагов
esc - возможен ли побег true/false
cont - продолжать после проигрыша true/false
СпойлерМагазин:
goods = [[type, id, price_flag(, price)]]
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
type - тип предмета [0] вещи, [1] оружие, [2] броня
id - ID предмета
price_flag - флаг новой цены 0 если нет, 1 если есть
price - своя цена, если флаг 1
Например:
goods = [[0,1,1,25],[0,2,0]] #первым в списке будет вещь с id 1 по новой цене 25, второй будет вещь с id 2 по цене из бд
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
Можно использовать массив
goods = []
for id in 1..20
goods.push([0, id, 0])
end
СпойлерВвод имени:
SceneManager.call(Scene_Name)
SceneManager.scene.prepare(id, long)
Fiber.yield
id - ID персонажа, которому нужно ввести имя
long - длинна имени
СпойлерВызов сцен:
SceneManager.call(Scene_Save) - сохранение
SceneManager.call(Scene_Load) - загрузка
SceneManager.exit - выход
SceneManager.call(Scene_Gameover) - конец игры
Вот так можно вызвать любую сцену из списка в скриптах
SceneManager.call(scene)
scene - нужная вам сцена ( Scene_Menu, Scene_Item и так далее)
Карта:
СпойлерПоказ имени карты:
$game_map.name_display = true/false
СпойлерВыбор тайлсета:
$game_map.change_tileset(n)
n - ID тайлсета
СпойлерВыбрать фон битвы:
$game_map.change_battleback("battleback1", "battleback2")
battleback1 и battleback2 - названия файлов без расширения
СпойлерВыбрать параллакс:
$game_map.change_parallax("name", Loop_Hor, Loop_Ver, HScroll, VScroll)
name - названия файла без расширения
Loop_Hor, Loop_Ver - зацикленная прокрутка по горизонтали и вертикали true/false
HScroll, VScroll - скорость автоматической прокрутки
СпойлерИнформация:
Координаты игрока
$game_player.x
$game_player.y
Координаты события
$game_map.events[event_id].x
$game_map.events[event_id].y
event_id - ID события
Тег территории
$game_map.terrain_tag(x, y) - по координатам
$game_player.terrain_tag - по местоположению игрока
$game_map.events[event_id].terrain_tag - по местоположению события
event_id - ID события
Регион
$game_map.region_id(x, y) - по координатам
$game_player.region_id - по местоположению игрока
$game_map.events[event_id].region_id - по местоположению события
event_id - ID события
Карта
$game_map.name - имя карты
$game_map.map_id - ID карты
Видит ли игрок событие
$game_map.events[event_id].near_the_player?
event_id - ID события
Принимает значение true/false если игрок в пределах 20 квадратов
Сведения о событии
$game_map.events[event_id].direction - направление события
$game_map.event_id_xy(x, y) - id события по координатам
СпойлерВыбрать графику:
Для игрока
$game_actors[actor_id].set_graphic("char_name", char_index, "face_name", face_index)
$game_player.refresh
actor_id - ID персонажа
char_name - имя файла графики, без расширения
char_index - индекс графики, начиная с 0
face_name - имя файла лица, без расширения
face_index - индекс лица, начиная с 0
Для события
$game_map.events[event_id].set_graphic("char_name", char_index)
event_id - ID события
char_name - имя файла графики, без расширения
char_index - индекс графики, начиная с 0
Дополнение:
СпойлерИнструменты:
Очистить карту от эффектов/тона/вспышки/тряски/погоды/картинки
$game_map.screen.clear
Очитить моментально
$game_map.screen.clear_tone/shake/weather/pictures
СпойлерКнопки:
К сожалению я так и не понял чем эти команды отличаются
Input.trigger?(:A)
Input.repeat?(:A)
Input.press?(:A)
СпойлерДебагинг:
Моментально использовать предмет, независимо от его наличия
$game_actors[n].use_item($data_items[x]) - предмет x для персонажа с ID n
$game_party.leader.use_item($data_items[x]) - предмет x лидера отряда
$game_party.members[n].use_item($data_items[x]) - предмет x для члена партии с n по счету (лидер всегда 0)
Узнать размер партии
$game_party.members.size
или
$game_party.all_members.size
Проверка доступа
$game_actors[X].equips.include?($data_weapons[Y]) - надето ли на персонажа X орудие Y
$game_actors[X].equips.include?($data_armors[Y]) - надето ли на персонажа X броня Y
$game_actors[X].skills.include?($data_skills[Y]) - изучен ли у персонажа X навык Y
$game_actors[X].states.include?($data_states[Y]) - висит ли на персонаже X эффект Y
Получить Имя/Прозвище, ID класса, класс
$game_actors[X].name - возвращает имя
$game_actors[X].nickname - возвращает прозвище
$game_actors[X].class.id - возвращает ID класса
$game_actors[X].class.name - возвращает имя класса
Последний раз редактировалось Paranoid; 13.04.2017 в 15:07.
Лицензионный VX Ace. Спасибо Петр.
2 года мукеризма в пустую.
О, и о применений расскажи для самых маленьких :3
Ну ты понял, что я о себе да?
И вообще ты можешь хорошим сенсеем стать с таким подходом
Дескард, это аналог этой темы. Только для Аси.
Парноид просто взялся за перевод. За что ему спасибо.
Оригинал же здесь.
Что же касается применения, то это уже от фантазии зависит.
Я некоторые команды применял в Безумии, чтоб автоматом сменить оружие у героя. Делал огород Лорду с расчетом времени роста.
Ту же ловушку Шипы в полу. И т.д. и т.п.
Но самое классное и расширяющее возможности - это то, что их можно пихать в Move Route ивента.
О, и о применений расскажи для самых маленьких :3
Ну ты понял, что я о себе да?
И вообще ты можешь хорошим сенсеем стать с таким подходом
Ну можно конечно потупить с некоторыми командами, но я не уверен что смогу найти применение прям всем. Как только выложу все части может склепаю демку с использованием некоторых команд, если уж прям нужно.
Лицензионный VX Ace. Спасибо Петр.
2 года мукеризма в пустую.
Социальные закладки